package main

import "fmt"

/**

defer应用场景:
	比如你想关闭某个使用的资源，在使用的时候直接随手defer，
	因为defer有延迟执行机制(函数执行完毕再执行defer压入栈的语句)所以你用完随手写了关闭，比较省心，省事

**/
func main() {
	defer add(3, 4)        // 再执行这个调用
	fmt.Println(add(1, 2)) // 先执行这个调用
}

func add(num1 int, num2 int) int {
	fmt.Println("add函数执行了-----------")
	// 在go语言中，defer关键字可以延迟函数的执行，直到函数执行完毕。
	// 在go语言中，程序遇到defer关键字时，不会立即执行defer后面语句，而是将defer后面的语句压入栈中，然后执行defer关键字后面的函数。
	// 栈的执行顺序是后进先出
	defer fmt.Println("num1 =", num1)
	defer fmt.Println("num2 =", num2)
	num1 += 10

	var sum int = num1 + num2
	fmt.Println("sum =", sum)
	return sum
}
